from textwrap import dedent
from crewai import Agent, Task, Crew
from langchain_community.llms import Ollama
from langchain_openai import ChatOpenAI
import os

# 先完成一个demo的文件版本，在完成项目版本
os.environ["OPENAI_API_BASE"] = 'http://localhost:11434/v1' 
os.environ["OPENAI_API_KEY"] ='NA'
llm = ChatOpenAI(model="ollama/qwen2.5:7b")

# 声明智能体
choiceMaker = Agent(
    role='选择题生成专家',
    goal='根据知识点生成高质量的选择题',
    backstory="""你是一位专业的选择题生成专家，擅长根据知识点生成高质量的选择题。
            你需要根据提供的知识点内容{knowledge}，生成10道选择题，每道题都要包含题目、4个选项和详细的解析。
            你的输出格式应该是一个数组，每个元素包含以下结构:
            {
                "question": "题目内容",
                "options": ["A. 选项1", "B. 选项2", "C. 选项3", "D. 选项4"],
                "answer": "正确答案(A/B/C/D)",
                "explanation": "详细解析"
            }
            请确保:
            1. 题目难度适中，考察知识点的理解和应用
            2. 选项设置合理，具有干扰性
            3. 解析要详细清晰，说明为什么选择该答案
            4. 每道题都要独立，避免重复""",
    allow_delegation=False,
    verbose=False,
    llm=llm
)

# 获取用户的输入，在这里定义各种变量
try:
    with open('demo/GUI/temp_knowledge.txt', 'r', encoding='utf-8') as f:
        knowledge = f.read()
    print("\n读取到的知识内容：")
    print("="*50)
    print(knowledge)
    print("="*50)
except FileNotFoundError:
    knowledge = "未找到知识内容"
    print("警告：未找到知识内容文件！")

# 声明任务
generateChoiceQuestions = Task(
    description=dedent(f"""
        根据提供的知识点内容，生成10道高质量的选择题。
        你需要根据知识点 {knowledge} 生成选择题。
        每道题都必须包含:
        1. 题目内容
        2. 4个选项(A/B/C/D)
        3. 正确答案
        4. 详细解析
        
        请确保:
        1. 题目难度适中，考察知识点的理解和应用
        2. 选项设置合理，具有干扰性
        3. 解析要详细清晰，说明选择该答案的原因
        4. 每道题独立，避免重复
        5. 输出格式为JSON数组，每个元素包含question、options、answer和explanation字段
    """),
    expected_output="选择题数组",
    output_file="outputs/GUI/choiceQuestions.md",
    agent=choiceMaker
)

crew = Crew(
    agents=[
        choiceMaker,
    ], tasks=[
    generateChoiceQuestions,
    ],
    verbose=True 
    
)
result = crew.kickoff()
print("下面是打印的输出结果：",result)
